/**
 * 1.有些情况单个值可能会有多个所有者
 * 2.Rc<T> 用于当我们希望在堆上分配一些内存供程序的多个部分读取，而且无法在编译时确定程序的哪一部分会最后结束使用它的时候
 *   所谓Rc即 Reference Count的缩写，意为引用计数。
 * 3.Rc<T> 只能用于单线程场景。  --  如果要使用多线程，请考虑使用Arc<T>代替
 * 4.Rc::clone 的实现并不像大部分类型的 clone 实现那样对所有数据进行深拷贝。Rc::clone 只会增加引用计数，这并不会花费多少时间
 */
use std::rc::Rc;
fn main() {
    rc_test();
}

#[derive(Debug)]
struct student{
    name:Rc<String>,
    age:i32,
}

fn  rc_test(){
    let name=Rc::new(String::from("张三"));
    let stu1=student{name:Rc::clone(&name),age:20};
    println!("{:?}",stu1);
    println!("{} 引用次数:{}",name,Rc::strong_count(&name));
    let stu2=student{name:Rc::clone(&name),age:21};
    println!("{:?}",stu2);
    println!("{} 引用次数:{}",name,Rc::strong_count(&name));
}